package com.briup.day03;

import java.util.Random;
import java.util.Scanner;

/*
流程控制
 */
public class ProcessControl {
    public static void main(String[] args) {
        // switch...case，使用场景：当某一个条件的取值是在某几个确定的值之间选择，
        // 并且，选择的值不一，执行的结果也不一的情况下，我们需要使用switch...case
        // 键盘输入： 键盘中存在字母输入、方向输入，不同的输入，需要执行的结果不一
        // 写一个学生管理系统的菜单界面
        System.out.println("==========欢迎进入到学生管理系统==========");
        System.out.println("1.添加学生信息");
        System.out.println("2.修改学生信息");
        System.out.println("3.删除学生信息");
        System.out.println("4.查看学生信息");
        System.out.println("0.退出程序");
        System.out.println("请在键盘中输入[0,4]的值:");
        Scanner sc = new Scanner(System.in);
        boolean flag = true;
        // la: 是Java中提供的label位，即可以使用其给某一行代码设置一个标志位，
        // 结合break、continue关键字使用，可以跳出到指定的标志位节点
        la:
        while (flag) {
            switch (sc.nextInt()) {
                // 在switch...case结构中，命中某一个case后，会执行该case内的代码，
                // 以及默认会执行其后续case中的代码，除非在该case中存在break关键字，
                // 才会在执行完该分支之后，退出switch语句
                case 1:
                    System.out.println("请输入要添加的学生信息.....");
                    break;
                case 2:
                    System.out.println("请输入要修改学生的学号.....");
                    break;
                case 3:
                    System.out.println("请输入要删除学生的学号信息....");
                    break;
                case 4:
                    System.out.println("请选择要查询的操作....");
                    break;
                case 0:
                    System.out.println("退出程序.....");
                    // 将循环条件修改为false，那么在下一次判断时，就不会进入到循环体中
//                    flag = false;
                    // 指定跳出到某一个标志位中，指定跳出到la位，即不是跳出switch语句，
                    // 而是直接跳出while循环
                    break la;
                // 对于不符合条件的结果，在switch中可以使用default设置一个默认分支进行处理
                default:
                    System.out.println("您输入的菜单项有误，请重新输入");
            }
        }
        System.out.println("程序执行结束");
    }

    private static void test2() {
        // 编写if多分支结构式，需要注意条件的比较返回值不要存在重合部分
        Random random = new Random();
        int age = random.nextInt(80);
        System.out.println("年龄age:" + age);
        if (age > 20 && age <= 40) {
            System.out.println("年轻人");
        } else if (age > 40 && age <= 60) {
            System.out.println("中年人");
        } else if (age > 60) {
            System.out.println("老年人");
        }
        // 推荐在条件比较时，从小范围到大范围进行比较，比较的返回是逐步扩大的
        if (age > 60) {
            System.out.println("老年人");
        }
        // 在到这一部分的比较时，隐含了age<=60的条件
        else if (age > 40) {
            System.out.println("中年人");
        } else if (age > 18) {
            System.out.println("年轻人");
        } else {
            System.out.println("未成年人");
        }
    }

    private static void test() {
        // 无论是分支流程还是循环流程，都只是控制一个代码片段/代码块根据条件进行执行；
        // 该代码片段/代码块 可以是一条代码语句，也可以是一个被{}组织的多条代码构成的代码块
        Random random = new Random();
        int age = random.nextInt(150);
        if (age >= 18) {
            // age>=18的时候才会执行
            System.out.println("属于成年人：" + age);
            // 一定会执行
            System.out.println("不受未成年人保护法保护");
        }
        // else必须挨着/和if代码块一起组合使用
        else {
            System.out.println("这是未成年人：" + age);
        }
    }
}
